CC=@CC@
CFLAGS=@CFLAGS@
LDFLAGS=@LDFLAGS@
MAILERCONF=@MAILERCONF@

PGMS = postoffice dbm expire
TOOLS = mx b64 getopt mf
MAN8PAGES=postoffice.8 authexpire.8 sendmail.8 smtpd.8
MAN7PAGES=mailaddr.7 greylist.7 usermap.7
VMAN7PAGES=vhosts.7
MAN5PAGES=aliases.5 smtpauth.5 mailaudit.5 postoffice.cf.5
VMAN5PAGES=domains.cf.5
MAN1PAGES=newaliases.1 mailq.1 runq.1

MANPAGES=$(MAN8PAGES) $(MAN7PAGES) $(MAN5PAGES) $(MAN1PAGES) \
	 $(VMAN5PAGES) $(VMAN7PAGES)

prefix=@prefix@
libdir=@libdir@
libexec=@libexec@
bindir=@exedir@
sbindir=@sbindir@
mandir=@mandir@

@AUTHMK@AUTH_OBJS= auth.o b64.o
@PAMOK@AUTH_OBJS+=pam_login.o

OBJS=server.o letter.o smtp.o addr.o getif.o getloadavg.o \
     mx.o userok.o address.o spool.o recipient.o listq.o \
     mail.o local.o virusscan.o greylist.o runq.o mapfd.o \
     config.o remote.o mbox.o bounce.o postoffice.o \
     newaliases.o arpatok.o audit.o goodness.o domain.o \
     dbif.o getopt.o socklib.o version.o usermap.o \
     goodfile.o mf.o locker.o headers.o @STRLCPY@ \
     $(AUTH_OBJS)


all: $(PGMS)

postoffice: $(OBJS)
	$(CC) $(CFLAGS) -o postoffice $(OBJS) @LIBS@ @LIBPAM@ @LIBWRAP@ @LIBCRYPT@

version.o: version.c VERSION
	$(CC) $(CFLAGS) -c version.c -DVERSION=\"`cat VERSION`\"

expire:	expire.c dbif.o
	$(CC) $(CFLAGS) -o expire expire.c dbif.o @LIBS@

dbm:	dbm.c dbif.o
	$(CC) $(CFLAGS) -o dbm dbm.c dbif.o @LIBS@

tools:  $(TOOLS)

mx:     mx.c
	$(CC) $(CFLAGS) -DDEBUG=1 -o mx mx.c @LIBS@

mf:     mf.c mx.o socklib.o @STRLCPY@
	$(CC) $(CFLAGS) -DDEBUG=1 -o mf mf.c mx.o socklib.o @STRLCPY@ @LIBS@

b64:    b64.c
	$(CC) $(CFLAGS) -DDEBUG=1 -o b64 b64.c

getopt: getopt.c
	$(CC) $(CFLAGS) -DDEBUG=1 -o getopt getopt.c

install: install.@WHICH@ install.man


install.man: $(MANPAGES)
	@INSTALL_DIR@ $(DESTDIR)$(mandir)/man8
	@INSTALL_DIR@ $(DESTDIR)$(mandir)/man7
	@INSTALL_DIR@ $(DESTDIR)$(mandir)/man5
	@INSTALL_DIR@ $(DESTDIR)$(mandir)/man1
	@INSTALL_DATA@ -c $(MAN8PAGES) $(DESTDIR)$(mandir)/man8
	@INSTALL_DATA@ -c $(MAN7PAGES) $(DESTDIR)$(mandir)/man7
	if test "@VPATH@";then @INSTALL_DATA@ -m 444 -c $(VMAN7PAGES) $(DESTDIR)$(mandir)/man7; fi
	@INSTALL_DATA@ -c $(MAN5PAGES) $(DESTDIR)$(mandir)/man5
	if test "@VPATH@";then @INSTALL_DATA@ -m 444 -c $(VMAN5PAGES) $(DESTDIR)$(mandir)/man5; fi
	@INSTALL_DATA@ -c $(MAN1PAGES) $(DESTDIR)$(mandir)/man1
	@INSTALL_DATA@ -c dbm.1 $(DESTDIR)$(mandir)/man1/@NDBM@.1

install.common.binaries:
	@INSTALL_DIR@ $(DESTDIR)$(libexec)
	@INSTALL_DIR@ $(DESTDIR)$(bindir)
	@INSTALL_PROGRAM@ -c expire $(DESTDIR)$(libexec)/authexpire
	@INSTALL_PROGRAM@ -c dbm $(DESTDIR)$(bindir)/@NDBM@

install.programs: $(PGMS) install.common.binaries
	@INSTALL_DIR@ $(DESTDIR)$(libdir)
	@INSTALL@ -m 4711 -c postoffice $(DESTDIR)$(libdir)
	@INSTALL_DIR@ $(DESTDIR)$(bindir)
	@INSTALL_DIR@ $(DESTDIR)$(sbindir)
	for x in runq mailq newaliases sendmail; do \
	    rm -f $(DESTDIR)$(bindir)/$$x; \
	    ln -s $(libdir)/postoffice $(DESTDIR)$(bindir)/$$x; \
	done
	for x in sendmail smtpd; do \
	    rm -f $(DESTDIR)$(sbindir)/$$x; \
	    ln -s $(libdir)/postoffice $(DESTDIR)$(sbindir)/$$x; \
	done
	rm -f $(DESTDIR)$(libdir)/sendmail
	ln -s $(libdir)/postoffice $(DESTDIR)$(libdir)/sendmail

install.mailfilter: $(PGMS) install.common.binaries
	@INSTALL_DIR@ $(DESTDIR)$(libexec)
	@INSTALL_DIR@ $(DESTDIR)$(bindir)
	@INSTALL@ -m 4@BINMODE@ -c postoffice $(DESTDIR)$(libexec)
	ln -fs @MAILWRAPPER@ $(DESTDIR)$(bindir)/runq
	echo "# emulate sendmail with postoffice" > $(DESTDIR)$(MAILERCONF).new
	for x in sendmail send-mail mailq newaliases runq; do \
	    echo "$$x	$(libexec)/postoffice"; \
	done >> $(DESTDIR)$(MAILERCONF).new
	if test -r $(DESTDIR)$(MAILERCONF); then \
	    mv -f $(DESTDIR)$(MAILERCONF) $(DESTDIR)$(MAILERCONF).old; \
	else \
	    true; \
	fi
	mv $(DESTDIR)$(MAILERCONF).new $(DESTDIR)$(MAILERCONF)

clean:
	rm -f *.o $(PGMS) $(TOOLS)

distclean spotless: clean
	@DISTCLEAN@ @GENERATED_FILES@ @CONFIGURE_FILES@

addr.o: addr.c
address.o: address.c config.h letter.h env.h domain.h mx.h public.h
arpatok.o: arpatok.c config.h
audit.o: audit.c audit.h env.h letter.h domain.h
auth.o: auth.c config.h letter.h env.h domain.h dbif.h audit.h
b64.o: b64.c config.h
bounce.o: bounce.c config.h letter.h env.h domain.h mbox.h bounce.h \
          spool.h public.h
config.o: config.c config.h env.h audit.h letter.h domain.h mf.h \
          public.h
dbif.o: dbif.c config.h dbif.h
dbm.o: dbm.c config.h dbif.h
domain.o: domain.c config.h letter.h env.h domain.h
expire.o: expire.c config.h dbif.h
getif.o: getif.c config.h
getloadavg.o: getloadavg.c config.h
getopt.o: getopt.c config.h
goodfile.o: goodfile.c config.h letter.h env.h domain.h
goodness.o: goodness.c config.h dbif.h letter.h env.h domain.h audit.h
greylist.o: greylist.c config.h letter.h env.h domain.h dbif.h
letter.o: letter.c config.h letter.h env.h domain.h mx.h spool.h \
          public.h
listq.o: listq.c config.h spool.h letter.h env.h domain.h
local.o: local.c config.h letter.h env.h domain.h spool.h public.h
locker.o: locker.c config.h
mail.o: mail.c config.h letter.h env.h domain.h spool.h public.h
mapfd.o: mapfd.c
mbox.o: mbox.c config.h mbox.h env.h socklib.h public.h letter.h \
         domain.h mx.h
mf.o: mf.c config.h mf.h letter.h env.h domain.h mx.h socklib.h
mx.o: mx.c config.h mx.h
newaliases.o: newaliases.c config.h dbif.h aliases.h env.h domain.h
postoffice.o: postoffice.c config.h letter.h env.h domain.h smtp.h \
              audit.h public.h
recipient.o: recipient.c config.h letter.h env.h domain.h
remote.o: remote.c config.h letter.h env.h domain.h mbox.h bounce.h \
          socklib.h spool.h
runq.o: runq.c config.h spool.h letter.h env.h domain.h bounce.h \
        public.h
server.o: server.c config.h letter.h env.h domain.h smtp.h mx.h \
          public.h
smtp.o: smtp.c config.h letter.h env.h domain.h smtp.h mx.h mf.h \
        audit.h public.h spool.h
socklib.o: socklib.c config.h socklib.h
spool.o: spool.c config.h spool.h letter.h env.h domain.h mx.h
usermap.o: usermap.c config.h letter.h env.h domain.h usermap.h
userok.o: userok.c config.h letter.h env.h domain.h dbif.h usermap.h
version.o: version.c
virusscan.o: virusscan.c config.h letter.h env.h domain.h
